/**
 * MCU 厂家 SDK 中使用的 OS 适配层头文件
 * Copyright (c) 2021 深圳市智辰科技有限公司
 * All rights reserved.
 */

#ifndef _OS_H_
#define _OS_H_

#include "stdc.h"
#include "sys_clock.h"

#ifdef __cplusplus
extern "C" {
#endif


/// 时间相关的函数
#define osGetMs()			mcu_get_ms()
#define osElapsedMs(x)		mcu_elapsed_ms(x)
#define osDelayMs(x)		mcu_delay_ms(x)

#define osGetUs()			mcu_get_us()
#define osElapsedUs(x)		mcu_elapsed_us(x)
#define osDelayUs(x)		mcu_delay_us(x)

#define osGetClock()		mcu_get_clock()
#define osSetClock(ts)		mcu_set_clock(ts)
#define osElapsedS(ts)		mcu_elapsed_second(ts)

/// 定义临界区数据结构
typedef uint32_t OSCritical;
/// 定义一个临界区
#define osCriticalDef(css) OSCritical css
/// 进入临界区
extern uint32_t CPU_SR_Save(uint8_t);
#define osCriticalEnter(css) (css) = CPU_SR_Save(0x20)
/// 退出临界区
extern void CPU_SR_Restore(uint32_t);
#define osCriticalLeave(css) CPU_SR_Restore(css)

/// @brief 喂看门狗
#define osFeedWatchdog() mcu_watchdog_feed()
/// @brief 重启
extern void platform_reset_patch(uint32_t errorCode);
#define osReboot(errorCode) platform_reset_patch(errorCode)


#ifdef __cplusplus
}
#endif

#endif // _OS_H_
